ASP.NET Core অ্যাপ্লিকেশনের জন্য ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট খুবই গুরুত্বপূর্ণ। এগুলি আপনার অ্যাপ্লিকেশনের কোডের গুণগত মান নিশ্চিত করতে এবং নতুন ফিচার যোগ করার সময় পূর্ববর্তী ফিচারগুলির সঠিকতা বজায় রাখতে সাহায্য করে। এখানে আমরা আলোচনা করব কিভাবে ASP.NET Core MVC এবং Web API টেস্ট করা যায়।
1. ASP.NET Core MVC টেস্ট করা
ASP.NET Core MVC অ্যাপ্লিকেশনের জন্য টেস্ট তৈরি করতে হলে, প্রথমে আপনাকে Unit Test এবং Integration Test কনসেপ্টের মধ্যে পার্থক্য বুঝতে হবে। MVC টেস্টে সাধারণত Controller এর একশন মেথডগুলোর জন্য টেস্ট করা হয়।
1.1 Unit Test তৈরি করা
Unit Testing তে, আমরা নির্দিষ্ট একটি ইউনিট (যেমন Controller, Service) টেস্ট করি। আমরা xUnit বা NUnit টেস্ট ফ্রেমওয়ার্ক ব্যবহার করতে পারি। এখানে xUnit এর উদাহরণ দেওয়া হলো।
xUnit ইনস্টল করা:
- প্রথমে আপনার টেস্ট প্রজেক্টে xUnit প্যাকেজ ইনস্টল করতে হবে।
dotnet add package xunit dotnet add package Microsoft.AspNetCore.Mvc.Testing dotnet add package MoqController Test করা:
- MVC Controller-এ যে ফিচার টেস্ট করতে চান তার জন্য একটি টেস্ট ক্লাস তৈরি করুন।
উদাহরণস্বরূপ, যদি আপনি
HomeControllerটেস্ট করতে চান:public class HomeControllerTests { private readonly HomeController _controller; private readonly Mock<IProductService> _mockService; public HomeControllerTests() { _mockService = new Mock<IProductService>(); _controller = new HomeController(_mockService.Object); } [Fact] public async Task Index_ReturnsAViewResult_WithAListOfProducts() { // Arrange _mockService.Setup(service => service.GetProducts()) .ReturnsAsync(new List<Product> { new Product { Id = 1, Name = "Product 1" } }); // Act var result = await _controller.Index(); // Assert var viewResult = Assert.IsType<ViewResult>(result); var model = Assert.IsAssignableFrom<List<Product>>(viewResult.ViewData.Model); Assert.Single(model); } }এখানে, Moq ব্যবহার করে
IProductServiceএর মক তৈরি করা হয়েছে এবংHomeControllerএরIndexএকশন টেস্ট করা হয়েছে।
1.2 Integration Test তৈরি করা
Integration Test-এ, আমরা পুরো অ্যাপ্লিকেশন বা কন্ট্রোলার ইন্টিগ্রেশন টেস্ট করি। ASP.NET Core-এ WebApplicationFactory ব্যবহার করে Integration Test করা হয়।
- WebApplicationFactory ইনস্টল করা: Web API টেস্টের মতো MVC টেস্টের জন্যও
Microsoft.AspNetCore.Mvc.Testingপ্যাকেজ ইনস্টল করতে হবে। Integration Test উদাহরণ:
public class HomeControllerIntegrationTests : IClassFixture<WebApplicationFactory<Startup>> { private readonly WebApplicationFactory<Startup> _factory; public HomeControllerIntegrationTests(WebApplicationFactory<Startup> factory) { _factory = factory; } [Fact] public async Task Index_ReturnsSuccessStatusCode() { // Arrange var client = _factory.CreateClient(); // Act var response = await client.GetAsync("/Home/Index"); // Assert response.EnsureSuccessStatusCode(); } }এখানে,
WebApplicationFactoryব্যবহার করে আমরা পুরো অ্যাপ্লিকেশনকে মক করেHomeControllerএরIndexএকশন টেস্ট করেছি।
2. ASP.NET Core Web API টেস্ট করা
ASP.NET Core Web API এর জন্য Integration Test তৈরি করা হয়, যাতে API এর রেসপন্স, স্ট্যাটাস কোড, এবং কনটেন্ট টেস্ট করা যায়। আমরা xUnit, Microsoft.AspNetCore.Mvc.Testing, এবং HttpClient ব্যবহার করব।
2.1 Web API Integration Test তৈরি করা
- API টেস্ট তৈরি করা: Web API এর টেস্টে, সাধারণত
HttpClientব্যবহার করে API রিকোয়েস্ট করা হয় এবং রেসপন্স চেক করা হয়। API Controller Test উদাহরণ:
public class ProductsControllerTests : IClassFixture<WebApplicationFactory<Startup>> { private readonly WebApplicationFactory<Startup> _factory; public ProductsControllerTests(WebApplicationFactory<Startup> factory) { _factory = factory; } [Fact] public async Task GetProducts_ReturnsOkResponse() { // Arrange var client = _factory.CreateClient(); // Act var response = await client.GetAsync("/api/products"); // Assert response.EnsureSuccessStatusCode(); var products = await response.Content.ReadAsStringAsync(); Assert.Contains("Product", products); } }এখানে, আমরা
WebApplicationFactoryব্যবহার করে API কল করলাম এবংGetAsyncমেথড ব্যবহার করেProductsAPI টেস্ট করলাম।
2.2 Mocking External Dependencies
অনেক সময়, Web API এর Controller গুলি এক্সটার্নাল সার্ভিস বা ডেটাবেসের সাথে যোগাযোগ করতে পারে। এই ধরনের ডিপেনডেন্সি মক করা গুরুত্বপূর্ণ। নিচে Moq ব্যবহার করে মক করা উদাহরণ দেখানো হলো।
public class ProductsControllerTests
{
private readonly ProductsController _controller;
private readonly Mock<IProductService> _mockService;
public ProductsControllerTests()
{
_mockService = new Mock<IProductService>();
_controller = new ProductsController(_mockService.Object);
}
[Fact]
public async Task GetProduct_ReturnsOkResult_WithProduct()
{
// Arrange
_mockService.Setup(service => service.GetProduct(1))
.ReturnsAsync(new Product { Id = 1, Name = "Product 1" });
// Act
var result = await _controller.GetProduct(1);
// Assert
var actionResult = Assert.IsType<ActionResult<Product>>(result);
var okResult = Assert.IsType<OkObjectResult>(actionResult.Result);
var product = Assert.IsType<Product>(okResult.Value);
Assert.Equal(1, product.Id);
}
}
এখানে, IProductService এর মক তৈরি করা হয়েছে এবং ProductsController এর GetProduct একশন টেস্ট করা হয়েছে।
3. ASP.NET Core MVC এবং Web API টেস্টে কিছু গুরুত্বপূর্ণ টিপস
- ডেটাবেস মকিং: যদি আপনার API বা Controller ডেটাবেসের সাথে কাজ করে, তাহলে InMemory Database বা Moq ব্যবহার করে ডেটাবেস মক করতে পারেন।
- Auth Token: যদি API অথেনটিকেশন ব্যবহার করে, তাহলে টেস্টে JWT বা Cookies মক করতে হবে।
- Test Coverage: নিশ্চিত করুন যে আপনার টেস্ট কাভারেজ যথেষ্ট, বিশেষ করে রিকোয়েস্ট, রেসপন্স, এবং স্ট্যাটাস কোড চেক করা।
- Test Isolation: টেস্টগুলি একে অপর থেকে বিচ্ছিন্ন থাকতে হবে, অর্থাৎ একটি টেস্টের ফলাফল অন্য টেস্টের ওপর প্রভাব ফেলবে না।
সারাংশ
ASP.NET Core MVC এবং Web API টেস্ট করার জন্য, আপনাকে Unit Test এবং Integration Test এর মধ্যে পার্থক্য বুঝতে হবে। xUnit এবং Moq এর মতো টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আপনি Controller এর একশন টেস্ট করতে পারেন এবং WebApplicationFactory ব্যবহার করে আপনি পুরো API বা MVC অ্যাপ্লিকেশন ইন্টিগ্রেশন টেস্ট করতে পারেন। টেস্ট করা আপনাকে অ্যাপ্লিকেশন উন্নয়নে সহায়তা করবে এবং কোডের সঠিকতা নিশ্চিত করবে।
Read more